package cn.itsource.block;

/**
 *
 *	代码块：
 *		1. 就是一对{}
 *		2. 分类：
 *				1. 静态代码块：直接在类中写：
 *					static {
 *						//一般用来做一些初始化工作，
 *						//因为在类加载的时候就执行了
 *					}
 *
 *				2. 局部代码块：直接在方法中写：
 *					一般没什么用，通常配合if/循环等语句一起，不会单独写
 *					
 *
 *				3. 构造代码块：直接在类中写：
 *					{
 *						//一般没用
 *						//该处的代码会直接在调用该类的构造方法的时候，将这些代码生成在构造方法的this()或者super()
 *						//下方，其他代码的上面
 *					}
 *		3. 只要是代码块都有作用域问题
 *		4. 执行流程：
 *				从静态代码块开始执行，然后是构造代码块，构造方法
 *
 *			有继承关系的代码块执行流程
 *				从最高父类的静态代码块开始加载，然后逐级向下加载，直到加载到当前类的静态代码块结束。
 *				再然后，从最高父类的构造代码块、构造方法开始执行，然后逐级向下执行，直到当前类的构造代码块、构造方法结束
 */
public class Block {
	/**
	 * 1. 静态代码块：直接在类中写：
	 */
	static {
		//一般用来做一些初始化工作，因为在类加载的时候就执行了
		System.out.println("static代码块");
	}
	
	/**
	 * 3. 构造代码块：直接在类中写：
	 */
	{
		//一般用来做一些初始化工作，因为在类加载的时候就执行了
		System.out.println("构造代码块");
	}
	
	/**
	 * 无参构造
	 */
	public Block() {
		super();
		//这里会生成构造代码块中的代码
		
		System.out.println("无参构造...");
	}
	
	public static void main(String[] args) {
		{
			//2. 局部代码块：直接在方法中写：
			//一般没什么用，通常配合if/循环等语句一起，不会单独写
			int a = 1;
		}
//		System.out.println(a);//出了a的作用域范围
		new Block();
	}

}
